package com.naiterui.ehp.bs.im.config;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 自定义 MQTT连接属性配置对象
 * MQTT连接属性的配置信息较多，全部硬编码或通过普通的配置文件进行配置
 * 不利于扩展或维护
 * 因此，采用自定义对象并通过spring进行初始化配置，方便使用和扩展
 */
@Component
@ConfigurationProperties(prefix = "naiterui.mqtt")
@Data
@NoArgsConstructor
public class MqttConnectionConfig {

    /**
     * mqtthost
     */
    private String host;
    /**
     * mqtt集群连接串
     */
    private String[] servers;
    private String[] innerServers;
    /**
     * 连接字符串
     */
    private String connectionUrl;

    /**
     * 连接超时时间
     */
    private int connectionTimeout;

    /**
     * 保持心跳的周期
     */
    private int keepAliveInterval;

    /**
     * 客户端Id
     */
    private String clientId;

    /**
     * 连接服务器的用户名
     */
    private String userName;

    /**
     * 连接服务器的密码
     */
    private String password;

    /**
     * 是否clean session
     * true ：当断开连接的时候将清除所有客户端连接信息
     * false：当断开连接的时候服务器会保存连接状态信息和未发送的消息
     */
    private boolean cleanSession;

    /**
     * 消息默认的编码字符集
     */
    private String defaultCharset;

    /**
     * 消息默认的Qos
     */
    private int defaultQos;

    /**
     * 客户端--连接的主机
     */
    private String clientHost;

    /**
     * 客户端--连接的端口
     */
    private int clientPort;

    /**
     * 客户端--心跳
     */
    private int clientKeepAliveInterval;

    /**
     * 客户端--是否清理session
     */
    private boolean clientCleanSession;

    /**
     * 客户端--收取消息的主题
     */
    private String clientMsgTopicName;

    /**
     * 客户端--连接超时时间
     */
    private int clientConnectionTimeout;

    /**
     * 客户端--QOS
     */
    private int clientQos;

    /**
     * 客户端--是否持久化消息
     */
    private boolean clientRetained;

    /**
     * bi接口
     */
    private String traceHost;

    /**
     * 公共主题名称
     */
    private String publicTopicName;

    /**
     * session过期 时间
     */
    private Integer sessionTimeout;

    /**
     * 公共push主题
     */
    private String publicPushTopicName;

    /**
     * 私人push主题(前缀)
     */
    private String privatePushTopicName;

    /**
     * Mqtt Pool Config
     */
    private MqttConnectionPoolConfig poolConfig;

}
